In a typical client-server environment, the client and server communicate with each other over a network. For example, the client may be interacting with a three-dimensional model rendered by the server. The client would prefer to see their interactions with the model updated in real-time, to increase the usability of the application.
For example, consider the case of a camera manipulation, where the user uses the mouse to rotate the model. During the mouse movement, hundreds of events are generated, each of them represents a new desired camera position. Each new desired camera position is sent to the server using a packet asking for the server to generate a new image. The new image corresponds to the data the packet contains. For example, the packet could contain data including camera position in the X, Y, and Z directions.
Depending on the computer clock speed, the number of events that are generated can be more than 100 events for each second of mouse movement.
If it takes approximately 17 milliseconds for the server to render one frame, and if the client sends all 100 events generated by one second of mouse manipulation, it would take 17×100 milliseconds=1.7 seconds to generate all the frames for the 1 second of mouse movement. So 1 second on the client side will result in 1.7 seconds of images rendering on the server side, which leads to de-synchronization between the client and the server.
The usual solution to this problem is to stop sending packets until the server acknowledges (ACK) to the client that the image has been rendered and that the server is now ready for the next packet. But this solution creates a correlation between the geographical distance (between the client and the server) and the frame rate—the further the distance between the client and the server, the longer the packets take to arrive, resulting in a lowered frame rate and sluggish responsiveness.
Therefore, responsiveness of a streaming application could be improved by a solution that minimized the effect of geographical distance between a client and a server.